/*
 * funcionesYEstructurasRaid.h
 *
 *  Created on: 06/10/2011
 *      Author: utn_so
 */

#ifndef ESTRUCTURACOLADISCOS_H_
#define ESTRUCTURACOLADISCOS_H_


#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include "queue.h"

typedef enum{
	lectura=1,
	escritura=2,
	inicioRaid=3,
	nuevoPlanificador=4,
	sincronizaDisco=5,
	seHizoWrite=6,
	seHizoRead=7
}tipoOperacion;

typedef struct tm *tiempo;

typedef struct sector{
	char *info;
	uint32_t sect;
}__attribute__((packed))sector;

typedef struct pedido{
	sector sector;
	uint8_t operacion;
	uint32_t socket;
	uint8_t destino;
	struct nodoDiscos *discoOrigen;
}__attribute__((packed))pedido;

/*typedef struct nodoDisco{
	pedido ped;
	struct nodoDisco *sig;
} nodoDisco;*/

typedef struct nodoDiscos {
	t_queue *pedidos;
	uint32_t estadoDisco;
	uint32_t idDisco;
	char* nombreDisco;
	struct nodoDiscos *sig;
}nodoDiscos;

typedef enum{
	fileSystem = 1,
	disco =0
}destinoPedido;

typedef enum{
	sincronizado = 1,
	noSincronizado =0
}estadoDisco;

void mensajes(char *nombreDisco, tipoOperacion mensaje, char *horaInicio, char *horaFin);
//void agregarSector(pedido ped, nodoDisco **list);
int32_t esDisco(nodoDiscos *losDiscos, char* disco);
void agregarDisco(nodoDiscos **losDiscos, int32_t idDisco, char *nombreDisco);
int32_t SacarDisco(nodoDiscos **losDiscos, uint32_t disco);
int32_t primerDiscoSincronizado(nodoDiscos **losDiscos);
//uint32_t agregarPedido(nodoDiscos **losDiscos, uint32_t disco, pedido ped);
//pedido sacarSector(nodoDisco **list);
//pedido sacarPedido(nodoDiscos **losDiscos, uint32_t disco);
nodoDiscos discoconMenosPedidos(nodoDiscos *losDiscos);
void ponerPedidoEnDiscos(pedido *ped, nodoDiscos **discos);

#endif /* ESTRUCTURACOLADISCOS_H_ */
